The present invention relates to disk arrays, and more particularly, relates to hardware and software architectures for hardware-implemented RAID (Redundant Array of Inexpensive Disks) and other disk array systems.
A RAID system is a computer data storage system in which data is spread or xe2x80x9cstripedxe2x80x9d across multiple disk drives. In many implementations, the data is stored in conjunction with parity information such that any data lost as the result of a single disk drive failure can be automatically reconstructed.
One simple type of RAID implementation is known as xe2x80x9csoftware RAID.xe2x80x9d With software RAID, software (typically part of the operating system) which runs on the host computer is used to implement the various RAID control functions. These control functions include, for example, generating drive-specific read/write requests according to a striping algorithm, reconstructing lost data when drive failures occur, and generating and checking parity. Because these tasks occupy CPU bandwidth, and because the transfer of parity information occupies bandwidth on the system bus, software RAID frequently produces a degradation in performance over single disk drive systems.
Where performance is a concern, a xe2x80x9chardware-implemented RAIDxe2x80x9d system may be used. With hardware-implemented RAID, the RAID control functions are handled by a dedicated array controller (typically a card) which presents the array to the host computer as a single, composite disk drive. Because little or no host CPU bandwidth is used to perform the RAID control functions, and because no RAID parity traffic flows across the system bus, little or no degradation in performance occurs.
One potential benefit of RAID systems is that the input/output (xe2x80x9cI/Oxe2x80x9d) data can be transferred to and from multiple disk drives in parallel. By exploiting this parallelism (particularly within a hardware-implemented RAID system), it is possible to achieve a higher degree of performance than is possible with a single disk drive. The two basic types of performance that can potentially be increased are the number of I/O requests processed per second (xe2x80x9ctransactional performancexe2x80x9d) and the number of megabytes of I/O data transferred per second (xe2x80x9cstreaming performancexe2x80x9d).
Unfortunately, few hardware-implemented RAID systems provide an appreciable increase in performance. In many cases, this failure to provide a performance improvement is the result of limitations in the array controller""s bus architecture. Performance can also be adversely affected by frequent interrupts of the host computer""s processor.
In addition, attempts to increase performance have often relied on the use of expensive hardware components. For example, some RAID array controllers rely on the use of a relatively expensive microcontroller that can process I/O data at a high transfer rate. Other designs rely on complex disk drive interfaces, and thus require the use of expensive disk drives.
The present invention addresses these and other limitations in existing RAID architectures.
The present invention provides an automated controller that implements a host side of a standard ATA interface protocol within automated circuitry to control an ATA disk drive. The automated controller preferably comprises a command buffer for storing disk drive commands to be executed by the ATA drive, and a data buffer that stores I/O data being transferred to or from the ATA disk drive. By automating the host side of the ATA protocol, the present invention provides a high degree of I/O performance, particularly in the context of RAID and other disk array systems. The automated controller may, for example, be embodied within an ASIC or FPGA device.
One particular embodiment of the invention is a disk array controller that controls a plurality of ATA disk drives. The disk array controller comprises a plurality of automated controllers of the type described above, each of which controls a single, respective, ATA disk drive. The automated controllers are connected by a control bus to a microcontroller that dispatches disk drive commands to the automated controllers in response to I/O requests from a host computer. The microcontroller is preferably programmed to support one or more RAID configurations. The automated controllers are also connected by a second bus to an automated processor. The automated processor transfers I/O data between the automated controllers/ATA disk drives and the host computer, and tracks the completion statuses of pending I/O requests.